Convert to getopt, improved documentation, change the script to require
authorJohan Dahlin <jdahlin@async.com.br>
Sun, 1 Jul 2007 15:58:24 +0000 (15:58 +0000)
committerJohan Dahlin <johan@src.gnome.org>
Sun, 1 Jul 2007 15:58:24 +0000 (15:58 +0000)
2007-07-01  Johan Dahlin  <jdahlin@async.com.br>

    * gtk/gtk-builder-convert (GtkBuilderConverter):
    Convert to getopt, improved documentation, change
    the script to require two arguments

svn path=/trunk/; revision=18325

ChangeLog
gtk/gtk-builder-convert [changed mode: 0644->0755]

index 597993fdb534f61634fe6f6a861c73297498b7f0..7d495ceb10723b94795957466f5a172c34021d2c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-07-01  Johan Dahlin  <jdahlin@async.com.br>
+
+       * gtk/gtk-builder-convert (GtkBuilderConverter): 
+       Convert to getopt, improved documentation, change
+       the script to require two arguments
+
 2007-06-30  Richard Hult  <richard@imendio.com>
 
        Continue the event handling cleanup:
old mode 100644 (file)
new mode 100755 (executable)
index be33edf..6f4f3e1
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 #
-# This is a script that can convert libglade files to the new gtkbuilder format
-#
 # TODO:
 #  GtkComboBox.items -> GtkListStore
 #  GtkTextView.text -> GtkTextBuffer
 #  Toolbars
 
+"""Usage: gtk-builder-convert [OPTION] [INPUT] [OUTPUT]
+Converts Glade files into XML files which can be loaded with GtkBuilder.
+The [INPUT] file is
+
+  -w, --skip-windows     Convert everything bug GtkWindow subclasses.
+  -h, --help             display this help and exit
+
+When OUTPUT is -, write to standard input.
+
+Examples:
+  gtk-builder-convert preference.glade preferences.ui
+
+Report bugs to http://bugzilla.gnome.org/."""
+
+import getopt
 import os
 import sys
 
 from xml.dom import minidom, Node
 
+WINDOWS = ['GtkWindow',
+           'GtkDialog',
+           'GtkFileChooserDialog',
+           'GtkMessageDialog']
+
 # The subprocess is only available in Python 2.4+
 try:
     import subprocess
@@ -71,6 +89,9 @@ def get_object_node(child_node):
 
 class GtkBuilderConverter(object):
 
+    def __init__(self, skip_windows):
+        self.skip_windows = skip_windows
+
     #
     # Public API
     #
@@ -166,6 +187,8 @@ class GtkBuilderConverter(object):
                 uimgr.setAttribute('id', 'uimanager1')
                 self._interface.childNodes.insert(0, uimgr)
             self._convert_menubar(uimgr, node)
+        elif klass in WINDOWS and self.skip_windows:
+            self._remove_window(node)
 
         self._default_widget_converter(node)
 
@@ -180,11 +203,21 @@ class GtkBuilderConverter(object):
             elif prop_name == "tooltip" and klass != "GtkAction":
                 prop.setAttribute("name", "tooltip-text")
             elif prop_name in ["response_id", 'response-id']:
+                # It does not make sense to convert responses when
+                # we're not going to output dialogs
+                if self.skip_windows:
+                    continue
                 object_id = node.getAttribute('id')
                 response = prop.childNodes[0].data
                 self._convert_dialog_response(node, object_id, response)
                 prop.parentNode.removeChild(prop)
 
+    def _remove_window(self, node):
+        object_node = get_object_node(get_child_nodes(node)[0])
+        parent = node.parentNode
+        parent.removeChild(node)
+        parent.appendChild(object_node)
+
     def _convert_menubar(self, uimgr, node):
         menubar = self._dom.createElement('menubar')
         menubar.setAttribute('name', node.getAttribute('id'))
@@ -380,16 +413,43 @@ def _indent(output):
     s.stdin.close()
     return s.stdout.read()
 
+def usage():
+    print __doc__
+
+def main(args):
+    try:
+        opts, args = getopt.getopt(args[1:], "hw",
+                                   ["help", "skip-windows"])
+    except getopt.GetoptError:
+        usage()
+        return 2
+
+    if len(args) != 2:
+        usage()
+        return 2
+
+    input_filename, output_filename = args
+
+    skip_windows = False
+    split = False
+    for o, a in opts:
+        if o in ("-h", "--help"):
+            usage()
+            sys.exit()
+        elif o in ("-w", "--skip-windows"):
+            skip_windows = True
+
+    conv = GtkBuilderConverter(skip_windows=skip_windows)
+    conv.parse_file(input_filename)
+
+    xml = _indent(conv.to_xml())
+    if output_filename == "-":
+        print xml
+    else:
+        open(output_filename, 'w').write(xml)
+        print "Wrote", output_filename
 
-def main():
-    if len(sys.argv) < 2:
-        raise SystemExit("Usage: %s filename.glade" % (sys.argv[0],))
-
-    conv = GtkBuilderConverter()
-    conv.parse_file(sys.argv[1])
-
-    xml = conv.to_xml()
-    print _indent(xml)
+    return 0
 
 if __name__ == "__main__":
-    main()
+    sys.exit(main(sys.argv))